/**
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * $Id$ CatalogoBean.java
 * Universidad de los Andes (Bogotá - Colombia)
 * Departamento de Ingeniería de Sistemas y Computación
 * Licenciado bajo el esquema Academic Free License version 2.1
 *
 * Ejercicio: Muebles los Alpes
 * Autor: Camilo Alvarez
 * Autor: David Méndez
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
package com.losalpes.catalogo.beans;

import com.losalpes.catalogo.bos.Mueble;
import com.losalpes.catalogo.bos.TipoMueble;
import com.losalpes.catalogo.servicios.CatalogServiceMock;
import com.losalpes.catalogo.servicios.ICatalogService;
import java.util.List;
import javax.faces.model.SelectItem;

/**
 * Clase que modela el backing bean del catalogo de la tienda
 * @author Camilo Alvarez
 * @author David Méndez
 */
public class CatalogBean {

    // ----------------------------------------------
    // Atributos
    // ----------------------------------------------
    
    /**
     * Mueble actual del catalogo.
     */
    private Mueble mueble = new Mueble();

    /**
     * Relación con la interfaz que provee los servicios necesarios del catalogo para el sistema.
     */
    private ICatalogService catalogService;

    // ----------------------------------------------
    // Constructor
    // ----------------------------------------------

    /**
     * Constructor de la clase. Inicializa los atributos.
     */
    public CatalogBean() {
        catalogService = new CatalogServiceMock( );
    }

    // ----------------------------------------------
    // Métodos
    // ----------------------------------------------

    /**
     * Retorna el mueble actual del catalogo.
     * @return mueble. Mueble actual del catalogo.
     */
    public Mueble getMueble() {
        return mueble;
    }

    /**
     * Permite asignar un nuevo valor al mueble actual del catalogo.
     * @param cMueble. Nuevo mueble actual.
     */
    public void setMueble(Mueble cMueble) {
        this.mueble = cMueble;
    }

    /**
     * Retorna la lista de muebles que contiene el catalogo.
     * @return muebles. Lista de muebles que contiene el catalogo.
     */
    public List getMuebles() {
        return catalogService.findAllMuebles();
    }

    /**
     * Retorna la lista con los items que contienen los tipos de muebles contenidos en el catalogo.
     * @return tipo. Tipos de muebles contenidos en el catalogo.
     */
    public SelectItem[] getTiposMuebles() {
        TipoMueble[] tipos=  TipoMueble.values();
        SelectItem[] sitems = new SelectItem[tipos.length];
        for (int i = 0; i < sitems.length; i++) {
             sitems[i] = new SelectItem(tipos[i]);
        }
        return sitems;
    }

    /**
     * Agrega el mueble actual al catalogo.
     * @return respuesta de la accion.
     */
    public String add() {
        catalogService.add(mueble);
        mueble = new Mueble();
        return null;
    }
}